Amazon S3 Tables のプライベートVPCからのアクセスとポリシー管理によるアクセス制御を試してみた #AWSreInvent
AWS事業本部コンサルティング部の石川です。S3 TablesにVPCエンドポイントがすでに提供されているのでプライベートアクセスができるのかを確認します。また、よくある機密データをVPCの外からアクセスできないようにするためのポリシー管理の具体例も合わせて解説します。
S3 Tables の VPC エンドポイント
S3 Tables の VPC エンドポイントは、インターフェース型のエンドポイントとして提供されています。そのため、エンドポイントにセキュリティーグループを指定してVPC内のアクセスコントロールも可能です。
今回の検証環境
今回の検証環境は、以下の階層のTable Bucketです。
cm-namespace-20241221
└── cm_namespace
└── lineorder
なお、Cloud Shell(us-east-1)からTable Bucketの一覧を参照しようとすると以下のように表示されます。
[cloudshell-user@ip-10-134-41-76 ~]$ aws s3tables list-table-buckets
{
"tableBuckets": [
{
"arn": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221",
"name": "cm-namespace-20241221",
"ownerAccountId": "123456789012",
"createdAt": "2024-12-21T13:39:51.359829+00:00"
}
]
}
Cloud Shell(us-east-1)からTable を参照しようとすると以下のように表示されます。
[cloudshell-user@ip-10-134-41-76 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
{
"tables": [
{
"namespace": [
"cm_namespace"
],
"name": "lineorder",
"type": "customer",
"tableARN": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221/table/b2b01673-86df-498f-9290-e1c2cdcd31fc",
"createdAt": "2024-12-21T13:42:23.211619+00:00",
"modifiedAt": "2024-12-21T13:42:25.621779+00:00"
}
]
}
S3 Tables のプライベートVPCをからのアクセスを試す
プライベートVPCの作成
以下のようにInternet GatewayのないプライベートなVPC(10.0.0.0/16)を作成しました。
プライベートVPCからコマンド実行がエラーになることを確認
このプライベートVPCに直接接続するためのCloud Shell(vpc-internal)を以下のように設定します。
なお、プライベートVPCに接続したCloud Shell(vpc-internal)からTable Bucketの一覧を参照しようとすると、エンドポイントに到達できず、以下のようにエラーになります。
[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-table-buckets
Connect timeout on endpoint URL: "https://s3tables.us-east-1.amazonaws.com/buckets"
同様にプライベートVPCに接続したCloud Shell(vpc-internal)からTable を参照しようとすると、エンドポイントに到達できず、以下のようにエラーになります。
[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
Connect timeout on endpoint URL: "https://s3tables.us-east-1.amazonaws.com/tables/arn%3Aaws%3As3tables%3Aus-east-1%3A123456789012%3Abucket%2Fcm-namespace-20241221"
VPCエンドポイントを作成
まず、VPCエンドポイント用のセキュリティグループを作成します。
左のメニューから[PrivateLink and Lattice]の[Endpoints]を選択して、以下のようにS3 TablesのVPCエンドポイントを作成します。作成する際に上記のセキュリティグループを指定します。
プライベートVPCからコマンド実行が成功することを確認
プライベートVPCに接続したCloud Shell(vpc-internal)からTable Bucketの一覧が表示できました。
[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-table-buckets
{
"tableBuckets": [
{
"arn": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221",
"name": "cm-namespace-20241221",
"ownerAccountId": "123456789012",
"createdAt": "2024-12-21T13:39:51.359829+00:00"
}
]
}
同様にプライベートVPCに接続したCloud Shell(vpc-internal)からTable を参照できました。
[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
{
"tables": [
{
"namespace": [
"cm_namespace"
],
"name": "lineorder",
"type": "customer",
"tableARN": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221/table/b2b01673-86df-498f-9290-e1c2cdcd31fc",
"createdAt": "2024-12-21T13:42:23.211619+00:00",
"modifiedAt": "2024-12-21T13:42:25.621779+00:00"
}
]
}
プライベートVPC以外のアクセス制限を試す
アクセス制限するスコープ2種類あり、Table BucketレベルとTableレベルです。今回は、Table Bucketレベルで制限をかけたいと思います。制限をかけるにはTable Bucketに対してポリシーを設定します。ポリシーの設定方法についての詳細はこちらのブログをご覧ください。
Table Bucketレベルにポリシーを設定します。ポリシーでは、S3 TablesのVPCエンドポイント(vpce-03267f6d1d9cffaad)からのs3tables関連のActionを拒否するように設定しています。
[cloudshell-user@ip-10-132-37-247 ~]$ aws s3tables put-table-bucket-policy \
> --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221 \
> --resource-policy '{
> "Version": "2012-10-17",
> "Id": "VPCEAccessPolicy",
> "Statement": [
> {
> "Sid": "AccessFromSpecificVPCEOnly",
> "Effect": "Deny",
> "Principal": "*",
> "Action": "s3tables:*",
> "Resource": [
> "*"
> ],
> "Condition": {
> "StringNotEquals": {
> "aws:SourceVpce": "vpce-03267f6d1d9cffaad"
> }
> }
> }
> ]
> }'
Cloud Shell(us-east-1)からTable を参照しようとするとエラーになります。
[cloudshell-user@ip-10-132-37-247 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
An error occurred (AccessDeniedException) when calling the ListTables operation: User: arn:aws:sts::123456789012:assumed-role/cm-ishikawa.satoru/cm-ishikawa.satoru is not authorized to perform: s3tables:ListTables on resource: arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221 with an explicit deny
一方、プライベートVPCに接続したCloud Shell(vpc-internal)からTable を参照しようとすると、従来通りコマンド実行できます。
[cloudshell-user@ip-10-0-138-21 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
{
"tables": [
{
"namespace": [
"cm_namespace"
],
"name": "lineorder",
"type": "customer",
"tableARN": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221/table/b2b01673-86df-498f-9290-e1c2cdcd31fc",
"createdAt": "2024-12-21T13:42:23.211619+00:00",
"modifiedAt": "2024-12-21T13:42:25.621779+00:00"
}
]
}
最後に
新しい S3 TablesのVPCエンドポイントを利用することで、インターネットを経由せずにS3 Tablesにアクセスできることが確認されました。また、Table Bucketレベルでのポリシー設定により、特定のVPCエンドポイントからのアクセスのみを許可し、それ以外からのアクセスを制限できることも実証されました。
これらの機能を組み合わせることで、S3 Tablesのセキュリティを向上させることが可能です。プライベートVPCからのアクセスとポリシーによるアクセス制御を適切に設定することで、機密データの保護やコンプライアンス要件への対応が容易になります。